﻿using Controller;
using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HotelManager
{
    public partial class frmAddNgheNghiep : Form
    {
        public TblRole objRole { get; set; }

       


        RoleController ctrlRole = new RoleController();

        public frmAddNgheNghiep()
        {
            InitializeComponent();
            tlpCbbChucVu.SetToolTip(this.cbbChucVu, "Chọn chức vụ để sửa chửa");
            GetDataChucVu();

            if (objRole !=null)
            {
                cbbChucVu.SelectedIndex = objRole.Id;
                txtNgheNghiep.Text = objRole.PositionsName;
            }

        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtNgheNghiep.Text.Trim()))
            {
                MessageBox.Show("Không thể để trống tên chức vụ","thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                return;
            }

            if (cbbChucVu.SelectedIndex > 0)
            {

                RoleController ctrlRole = new RoleController();
                ctrlRole.ObjRole.Id = Convert.ToInt32(cbbChucVu.SelectedValue);
                ctrlRole.ObjRole.PositionsName = txtNgheNghiep.Text;
                if (ctrlRole.UpdateData())
                {
                    
                    MessageBox.Show("Cập nhật liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtNgheNghiep.Clear();

                }

            }
            else
            {
                RoleController ctrlRole = new RoleController();
                ctrlRole.ObjRole.PositionsName = txtNgheNghiep.Text;
                
                if (ctrlRole.AddData())
                {
                    MessageBox.Show("Thêm dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                
            }

            GetDataChucVu();
            txtNgheNghiep.Clear();

            CommonHelper.Updata = true;
        }

        private void GetDataChucVu()
        {
            cbbChucVu.DataSource = null; 
            cbbChucVu.Items.Clear();

                       

            List<TblRole> listRole = new List<TblRole>();
            TblRole temp = new TblRole();
            temp.Id = -1;
            temp.PositionsName = "[-- Thêm chức vụ mới --]";
            listRole.Add(temp);

          

            List<TblRole> tempRole = new List<TblRole>();
            RoleController ctrlRole = new RoleController();
            tempRole = ctrlRole.GetAllData();

            if (tempRole != null)
            {
                foreach (TblRole itemRole in tempRole)
                {
                    listRole.Add(itemRole);
                }
                cbbChucVu.DataSource = listRole;
                cbbChucVu.ValueMember = "Id";
                cbbChucVu.DisplayMember = "PositionsName";
                cbbChucVu.SelectedIndex = 0;
            }

           
        }

        private void cbbChucVu_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbbChucVu.SelectedIndex > 0)
            {
                btnAdd.Text = "Sữa";
                txtNgheNghiep.Text = cbbChucVu.Text.ToString();
            }
            else
                btnAdd.Text = "Thêm";
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn chắc muốn xóa chức vụ này!", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)
            {
                int i = -1;
                if (cbbChucVu.SelectedIndex > 0)
                {
                    i = Convert.ToInt32(cbbChucVu.SelectedValue);
                    //TODO: thực hiện xóa chức vụ và đã kiểm tra các ràng buộc toàn vẹn

                    if (!CheckBeforeDelete(i))
                    {
                        MessageBox.Show("Không thể xóa chức vụ này \nCó thể vẫn còn nhân viên hoặc quyền quản lý thuộc chức vụ này", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    else
                    {
                        if (ctrlRole.DeleteData(i))
                        {
                            MessageBox.Show("Dữ liệu đã được xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            this.GetDataChucVu();
                            txtNgheNghiep.Clear();
                        }
                    }
                        
                }
            }
        }

        private bool CheckBeforeDelete(int i)
        {
            PermissionFormController ctrPer = new PermissionFormController();
            List<TblPermissionsForm> lst = new List<TblPermissionsForm>();
            lst = ctrPer.GetAllDataByChucVu(i);
            
            //Bao: neu van con nhan vien dang thuoc chuc vu nay, khong  the xoa
            if (lst.Count>0)
            {
                return false;
            }


            UserController ctrUser = new UserController();
            List<TblUser> list = new List<TblUser>();
            i = cbbChucVu.SelectedIndex;
            list = ctrUser.GetAllDataByPositions(i);
            
            //BAO: neu van con 1 form chuc nang thuoc quan ly cua chuc vu nay thi cung khong the xoa chu vu nay
            if (list.Count>0)
            {
                return false;
            }

            return true;
        }

    }
}
